Población de países del Banco Mundial

Vamos a importar los datos world_bank_pop.csv. Lo primero siempre es cargar las paqueterías necesarias.

library(tidyverse)
library(lubridate)
library(patchwork)
library(tidyquant)
library(plotly)

Vamos a cargar los datos. Para que sea más fácil y reproducible su R Notebook, es necesario que estén guardados dentro de la carpeta en donde se encuentra su proyecto.

wb_pop <- read_csv("data/world_bank_pop.csv")
Parsed with column specification:
cols(
  .default = col_double(),
  country = col_character(),
  indicator = col_character()
)
See spec(...) for full column specifications.
wb_pop

Vemos que los datos no están limpios.

Lo primero que tenemos que hacer es pasar los años a filas. Usaremos pivot_longer() de la paquetería tidyr.

wb_pop_long <-  wb_pop %>% 
  pivot_longer(cols = -c(country, indicator),
               names_to = "año", values_to = "valor"
               ) %>%
  mutate(año = as.integer(año))
wb_pop_long

Ahora queremos pasar los indicadores a columnas distintas.

wb_pop_long %>% 
  pivot_wider(names_from = indicator,
              values_from = valor)

Pudimos haber hecho estos dos pasos en uno solo, con ayuda de los pipes (%>%).

wb_pop_tidy <- wb_pop %>% 
  # primero pasamos los años a filas
  pivot_longer(cols = -c(country, indicator),
               names_to = "año", values_to = "valor"
               ) %>% 
  # cambiamos los años para que sean números enteros
  mutate(año = as.integer(año)) %>% 
  # ahora pasamos los indicadores a columnas
  pivot_wider(names_from = indicator,
              values_from = valor) %>% 
  # cambio la variable country a factores
  mutate(country = as_factor(country))
wb_pop_tidy

Si quisiéramos ver solo los datos para México, podemos usar filter().

Para quedarnos solo con datos de México:

wb_pop_tidy %>% 
  filter(country == "MEX")

Para quedarnos con datos de México y solo las variables de año y población urbana total:

wb_pop_tidy %>% 
  filter(country == "MEX") %>% 
  select(año, SP.URB.TOTL)

Ahora, si quisiéramos todas las variables, menos SP.URB.TOTL, para México y Brasil:

wb_pop_tidy %>% 
  filter(country %in% c("MEX","BRA")) %>% 
  select(-SP.URB.TOTL)

Si queremos deducir cuál es la población rural por país, tendríamos que agregar una nueva variable. Lo haremos con mutate().

wb_pop_tidy %>% 
  filter(country %in% c("MEX","BRA","CAN")) %>% 
  mutate(pob_rural = SP.POP.TOTL - SP.URB.TOTL)

Si quisiéramos saber el % de la población que vive en las zonas rurales, podríamos hacerlo igualmente con mutate().

wb_pop_tidy <-  wb_pop_tidy %>% 
  filter(country %in% c("MEX","BRA","CAN")) %>% 
  mutate(pob_rural = SP.POP.TOTL - SP.URB.TOTL,
         pct_rural = pob_rural / SP.POP.TOTL,
         pct_urbana = 1 - pct_rural)
wb_pop_tidy

Vamos a graficar el crecimiento de la población total a lo largo del tiempo.

g <- ggplot(data = wb_pop_tidy, aes(x = año, color = country))

g + geom_line(aes(y = SP.POP.TOTL))

Podemos utilizar una escala logarítmica en el eje y para visualizar mejor los datos.

g + geom_line(aes(y = SP.POP.TOTL)) + scale_y_log10()

g + geom_line(aes(y = pct_rural)) +
  geom_line(aes(y = pct_urbana))

g + geom_line(aes(y = pct_rural)) +
  geom_line(aes(y = pct_urbana)) +
  facet_wrap(~ country)

p1 <- g + geom_line(aes(y = pct_rural)) +
  theme(legend.position = "none")

p2 <- g + geom_line(aes(y = pct_urbana)) + 
  theme(legend.position = "none")

p3 <- g + geom_line(aes(y = SP.POP.TOTL)) + scale_y_log10()
p1 + p2 + p3


p1 / p2 /p3


p3 / (p1 + p2) + 
  plot_annotation(title = "Acomodando varias gráficas con patchwork",
                  subtitle = "Población total y evolución de la población urbana y rural")

Ventas de autos totales en EEUU

autos <- tq_get("TOTALNSA", get = "economic.data",
Warning messages:
1: In readChar(file, size, TRUE) : truncating string with embedded nuls
2: In readChar(file, size, TRUE) : truncating string with embedded nuls
3: In readChar(file, size, TRUE) : truncating string with embedded nuls
4: In readChar(file, size, TRUE) : truncating string with embedded nuls
5: In readChar(file, size, TRUE) : truncating string with embedded nuls
6: In readChar(file, size, TRUE) : truncating string with embedded nuls
7: In readChar(file, size, TRUE) : truncating string with embedded nuls
                from = "1977-01-01")
autos

Vamos a quitar la variable symbol que no nos aporta información relevante (con select()), y vamos a renombrar la variable price para que se llame ventas.

autos <- autos %>% 
  select(-symbol) %>% 
  rename(ventas = price)
autos
autos %>% tail()
p <- autos %>% 
  ggplot(aes(x = date, y = ventas)) +
  geom_line()

ggplotly(p)

Esta gráfica nos muestra que la serie presenta una fuerte estacionaliadad

p <- autos %>% 
  ggplot(aes(x = date, y = ventas)) +
  geom_line()

ggplotly(p)

Agregando líneas y etiquetas para mostrar las crisis.

p + 
  geom_vline(xintercept = ymd("2008-10-01"),
             linetype = "dashed", color = "red",
             size = 1.5) +
  geom_vline(xintercept = ymd("2020-03-01"),
             linetype = "dotted", color = "darkgreen",
             size = 1.5) + 
  annotate("label", x = c(ymd("2008-10-01"),
                            ymd("2019-07-01")),
             y = c(1750,1700), label = c("Inmobiliaria '08", "COVID-19"), color = "blue", size = 3)

p + geom_hline(yintercept = max(autos$ventas),
               linetype = 4, size = 1.2, color = "purple") +
  geom_hline(yintercept = min(autos$ventas),
             linetype = 5, size = 1.2, color = "turquoise1") +
geom_hline(yintercept = mean(autos$ventas), 
           linetype = 8, size = 1, color = "orchid2")

LS0tDQp0aXRsZTogIkltcG9ydGFjacOzbiBkZSBkYXRvcyB5IGxpbXBpZXphIg0KYXV0aG9yOiAiUGFibG8gQmVuYXZpZGVzIEhlcnJlcmEiDQpkYXRlOiAyMDIwLTA2LTAxDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiB1bml0ZWQNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQojIFBvYmxhY2nDs24gZGUgcGHDrXNlcyBkZWwgQmFuY28gTXVuZGlhbA0KDQpWYW1vcyBhIGltcG9ydGFyIGxvcyBkYXRvcyBgd29ybGRfYmFua19wb3AuY3N2YC4gTG8gcHJpbWVybyBzaWVtcHJlIGVzIGNhcmdhciBsYXMgcGFxdWV0ZXLDrWFzIG5lY2VzYXJpYXMuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeSh0aWR5cXVhbnQpDQpsaWJyYXJ5KHBsb3RseSkNCmBgYA0KDQpWYW1vcyBhIGNhcmdhciBsb3MgZGF0b3MuIFBhcmEgcXVlIHNlYSBtw6FzIGbDoWNpbCB5IHJlcHJvZHVjaWJsZSBzdSBSIE5vdGVib29rLCBlcyBuZWNlc2FyaW8gcXVlIGVzdMOpbiBndWFyZGFkb3MgZGVudHJvIGRlIGxhIGNhcnBldGEgZW4gZG9uZGUgc2UgZW5jdWVudHJhIHN1IHByb3llY3RvLg0KDQpgYGB7cn0NCndiX3BvcCA8LSByZWFkX2NzdigiZGF0YS93b3JsZF9iYW5rX3BvcC5jc3YiKQ0Kd2JfcG9wDQpgYGANClZlbW9zIHF1ZSBsb3MgZGF0b3Mgbm8gZXN0w6FuIGxpbXBpb3MuDQoNCkxvIHByaW1lcm8gcXVlIHRlbmVtb3MgcXVlIGhhY2VyIGVzIHBhc2FyIGxvcyBhw7FvcyBhIGZpbGFzLiBVc2FyZW1vcyBgcGl2b3RfbG9uZ2VyKClgIGRlIGxhIHBhcXVldGVyw61hIGB0aWR5cmAuDQoNCmBgYHtyfQ0Kd2JfcG9wX2xvbmcgPC0gIHdiX3BvcCAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gLWMoY291bnRyeSwgaW5kaWNhdG9yKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAidmFsb3IiDQogICAgICAgICAgICAgICApICU+JQ0KICBtdXRhdGUoYcOxbyA9IGFzLmludGVnZXIoYcOxbykpDQp3Yl9wb3BfbG9uZw0KYGBgDQoNCg0KQWhvcmEgcXVlcmVtb3MgcGFzYXIgbG9zIGluZGljYWRvcmVzIGEgY29sdW1uYXMgZGlzdGludGFzLg0KYGBge3J9DQp3Yl9wb3BfbG9uZyAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBpbmRpY2F0b3IsDQogICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gdmFsb3IpDQpgYGANCg0KUHVkaW1vcyBoYWJlciBoZWNobyBlc3RvcyBkb3MgcGFzb3MgZW4gdW5vIHNvbG8sIGNvbiBheXVkYSBkZSBsb3MgcGlwZXMgKGAgJT4lIGApLg0KDQpgYGB7cn0NCndiX3BvcF90aWR5IDwtIHdiX3BvcCAlPiUgDQogICMgcHJpbWVybyBwYXNhbW9zIGxvcyBhw7FvcyBhIGZpbGFzDQogIHBpdm90X2xvbmdlcihjb2xzID0gLWMoY291bnRyeSwgaW5kaWNhdG9yKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAidmFsb3IiDQogICAgICAgICAgICAgICApICU+JSANCiAgIyBjYW1iaWFtb3MgbG9zIGHDsW9zIHBhcmEgcXVlIHNlYW4gbsO6bWVyb3MgZW50ZXJvcw0KICBtdXRhdGUoYcOxbyA9IGFzLmludGVnZXIoYcOxbykpICU+JSANCiAgIyBhaG9yYSBwYXNhbW9zIGxvcyBpbmRpY2Fkb3JlcyBhIGNvbHVtbmFzDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBpbmRpY2F0b3IsDQogICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gdmFsb3IpICU+JSANCiAgIyBjYW1iaW8gbGEgdmFyaWFibGUgY291bnRyeSBhIGZhY3RvcmVzDQogIG11dGF0ZShjb3VudHJ5ID0gYXNfZmFjdG9yKGNvdW50cnkpKQ0Kd2JfcG9wX3RpZHkNCmBgYA0KDQpTaSBxdWlzacOpcmFtb3MgdmVyIHNvbG8gbG9zIGRhdG9zIHBhcmEgTcOpeGljbywgcG9kZW1vcyB1c2FyIGBmaWx0ZXIoKWAuDQoNClBhcmEgcXVlZGFybm9zIHNvbG8gY29uIGRhdG9zIGRlIE3DqXhpY286DQpgYGB7cn0NCndiX3BvcF90aWR5ICU+JSANCiAgZmlsdGVyKGNvdW50cnkgPT0gIk1FWCIpDQpgYGANCg0KUGFyYSBxdWVkYXJub3MgY29uIGRhdG9zIGRlIE3DqXhpY28geSBzb2xvIGxhcyB2YXJpYWJsZXMgZGUgYcOxbyB5IHBvYmxhY2nDs24gdXJiYW5hIHRvdGFsOg0KDQpgYGB7cn0NCndiX3BvcF90aWR5ICU+JSANCiAgZmlsdGVyKGNvdW50cnkgPT0gIk1FWCIpICU+JSANCiAgc2VsZWN0KGHDsW8sIFNQLlVSQi5UT1RMKQ0KYGBgDQoNCkFob3JhLCBzaSBxdWlzacOpcmFtb3MgKip0b2RhcyoqIGxhcyB2YXJpYWJsZXMsIG1lbm9zIGBTUC5VUkIuVE9UTGAsIHBhcmEgTcOpeGljbyB5IEJyYXNpbDoNCg0KYGBge3J9DQp3Yl9wb3BfdGlkeSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ICVpbiUgYygiTUVYIiwiQlJBIikpICU+JSANCiAgc2VsZWN0KC1TUC5VUkIuVE9UTCkNCmBgYA0KDQpTaSBxdWVyZW1vcyBkZWR1Y2lyIGN1w6FsIGVzIGxhIHBvYmxhY2nDs24gcnVyYWwgcG9yIHBhw61zLCB0ZW5kcsOtYW1vcyBxdWUgYWdyZWdhciB1bmEgbnVldmEgdmFyaWFibGUuIExvIGhhcmVtb3MgY29uIGBtdXRhdGUoKWAuDQoNCmBgYHtyfQ0Kd2JfcG9wX3RpZHkgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAlaW4lIGMoIk1FWCIsIkJSQSIsIkNBTiIpKSAlPiUgDQogIG11dGF0ZShwb2JfcnVyYWwgPSBTUC5QT1AuVE9UTCAtIFNQLlVSQi5UT1RMKQ0KYGBgDQoNClNpIHF1aXNpw6lyYW1vcyBzYWJlciBlbCAlIGRlIGxhIHBvYmxhY2nDs24gcXVlIHZpdmUgZW4gbGFzIHpvbmFzIHJ1cmFsZXMsIHBvZHLDrWFtb3MgaGFjZXJsbyBpZ3VhbG1lbnRlIGNvbiBgbXV0YXRlKClgLg0KDQpgYGB7cn0NCndiX3BvcF90aWR5IDwtICB3Yl9wb3BfdGlkeSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ICVpbiUgYygiTUVYIiwiQlJBIiwiQ0FOIikpICU+JSANCiAgbXV0YXRlKHBvYl9ydXJhbCA9IFNQLlBPUC5UT1RMIC0gU1AuVVJCLlRPVEwsDQogICAgICAgICBwY3RfcnVyYWwgPSBwb2JfcnVyYWwgLyBTUC5QT1AuVE9UTCwNCiAgICAgICAgIHBjdF91cmJhbmEgPSAxIC0gcGN0X3J1cmFsKQ0Kd2JfcG9wX3RpZHkNCmBgYA0KDQpWYW1vcyBhIGdyYWZpY2FyIGVsIGNyZWNpbWllbnRvIGRlIGxhICoqcG9ibGFjacOzbiB0b3RhbCoqIGEgbG8gbGFyZ28gZGVsIHRpZW1wby4NCg0KYGBge3J9DQpnIDwtIGdncGxvdChkYXRhID0gd2JfcG9wX3RpZHksIGFlcyh4ID0gYcOxbywgY29sb3IgPSBjb3VudHJ5KSkNCg0KZyArIGdlb21fbGluZShhZXMoeSA9IFNQLlBPUC5UT1RMKSkNCmBgYA0KDQpQb2RlbW9zIHV0aWxpemFyIHVuYSBlc2NhbGEgbG9nYXLDrXRtaWNhIGVuIGVsIGVqZSAqeSogcGFyYSB2aXN1YWxpemFyIG1lam9yIGxvcyBkYXRvcy4NCg0KYGBge3J9DQpnICsgZ2VvbV9saW5lKGFlcyh5ID0gU1AuUE9QLlRPVEwpKSArIHNjYWxlX3lfbG9nMTAoKQ0KYGBgDQoNCmBgYHtyfQ0KZyArIGdlb21fbGluZShhZXMoeSA9IHBjdF9ydXJhbCkpICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gcGN0X3VyYmFuYSkpDQpgYGANCg0KYGBge3J9DQpnICsgZ2VvbV9saW5lKGFlcyh5ID0gcGN0X3J1cmFsKSkgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBwY3RfdXJiYW5hKSkgKw0KICBmYWNldF93cmFwKH4gY291bnRyeSkNCmBgYA0KDQpgYGB7cn0NCnAxIDwtIGcgKyBnZW9tX2xpbmUoYWVzKHkgPSBwY3RfcnVyYWwpKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCg0KcDIgPC0gZyArIGdlb21fbGluZShhZXMoeSA9IHBjdF91cmJhbmEpKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCnAzIDwtIGcgKyBnZW9tX2xpbmUoYWVzKHkgPSBTUC5QT1AuVE9UTCkpICsgc2NhbGVfeV9sb2cxMCgpDQpgYGANCg0KDQpgYGB7cn0NCnAxICsgcDIgKyBwMw0KDQpwMSAvIHAyIC9wMw0KDQpwMyAvIChwMSArIHAyKSArIA0KICBwbG90X2Fubm90YXRpb24odGl0bGUgPSAiQWNvbW9kYW5kbyB2YXJpYXMgZ3LDoWZpY2FzIGNvbiBwYXRjaHdvcmsiLA0KICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSAiUG9ibGFjacOzbiB0b3RhbCB5IGV2b2x1Y2nDs24gZGUgbGEgcG9ibGFjacOzbiB1cmJhbmEgeSBydXJhbCIpDQpgYGANCg0KIyBWZW50YXMgZGUgYXV0b3MgdG90YWxlcyBlbiBFRVVVDQoNCmBgYHtyfQ0KYXV0b3MgPC0gdHFfZ2V0KCJUT1RBTE5TQSIsIGdldCA9ICJlY29ub21pYy5kYXRhIiwNCiAgICAgICAgICAgICAgICBmcm9tID0gIjE5NzctMDEtMDEiKQ0KYXV0b3MNCmBgYA0KDQpWYW1vcyBhIHF1aXRhciBsYSB2YXJpYWJsZSBgc3ltYm9sYCBxdWUgbm8gbm9zIGFwb3J0YSBpbmZvcm1hY2nDs24gcmVsZXZhbnRlIChjb24gYHNlbGVjdCgpYCksIHkgdmFtb3MgYSByZW5vbWJyYXIgbGEgdmFyaWFibGUgYHByaWNlYCBwYXJhIHF1ZSBzZSBsbGFtZSBgdmVudGFzYC4NCg0KYGBge3J9DQphdXRvcyA8LSBhdXRvcyAlPiUgDQogIHNlbGVjdCgtc3ltYm9sKSAlPiUgDQogIHJlbmFtZSh2ZW50YXMgPSBwcmljZSkNCmF1dG9zDQpgYGANCg0KYGBge3J9DQphdXRvcyAlPiUgdGFpbCgpDQpgYGANCg0KDQpgYGB7cn0NCnAgPC0gYXV0b3MgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBkYXRlLCB5ID0gdmVudGFzKSkgKw0KICBnZW9tX2xpbmUoKQ0KDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCkVzdGEgZ3LDoWZpY2Egbm9zIG11ZXN0cmEgcXVlIGxhIHNlcmllIHByZXNlbnRhIHVuYSBmdWVydGUgKiplc3RhY2lvbmFsaWFkYWQqKg0KDQpgYGB7cn0NCnAgPC0gYXV0b3MgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBkYXRlLCB5ID0gdmVudGFzKSkgKw0KICBnZW9tX2xpbmUoKQ0KDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCkFncmVnYW5kbyBsw61uZWFzIHkgZXRpcXVldGFzIHBhcmEgbW9zdHJhciBsYXMgY3Jpc2lzLg0KDQpgYGB7cn0NCnAgKyANCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0geW1kKCIyMDA4LTEwLTAxIiksDQogICAgICAgICAgICAgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAicmVkIiwNCiAgICAgICAgICAgICBzaXplID0gMS41KSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHltZCgiMjAyMC0wMy0wMSIpLA0KICAgICAgICAgICAgIGxpbmV0eXBlID0gImRvdHRlZCIsIGNvbG9yID0gImRhcmtncmVlbiIsDQogICAgICAgICAgICAgc2l6ZSA9IDEuNSkgKyANCiAgYW5ub3RhdGUoImxhYmVsIiwgeCA9IGMoeW1kKCIyMDA4LTEwLTAxIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeW1kKCIyMDE5LTA3LTAxIikpLA0KICAgICAgICAgICAgIHkgPSBjKDE3NTAsMTcwMCksIGxhYmVsID0gYygiSW5tb2JpbGlhcmlhICcwOCIsICJDT1ZJRC0xOSIpLCBjb2xvciA9ICJibHVlIiwgc2l6ZSA9IDMpDQpgYGANCg0KDQpgYGB7cn0NCnAgKyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtYXgoYXV0b3MkdmVudGFzKSwNCiAgICAgICAgICAgICAgIGxpbmV0eXBlID0gNCwgc2l6ZSA9IDEuMiwgY29sb3IgPSAicHVycGxlIikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtaW4oYXV0b3MkdmVudGFzKSwNCiAgICAgICAgICAgICBsaW5ldHlwZSA9IDUsIHNpemUgPSAxLjIsIGNvbG9yID0gInR1cnF1b2lzZTEiKSArDQpnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtZWFuKGF1dG9zJHZlbnRhcyksIA0KICAgICAgICAgICBsaW5ldHlwZSA9IDgsIHNpemUgPSAxLCBjb2xvciA9ICJvcmNoaWQyIikNCmBgYA0KDQoNCg0KDQoNCg0K